import axios from 'axios'
import config from '@/common/config'
// import { showToast } from '@/utils/toast' // 假设您有toast工具
import {  showToast,
  showSuccess,
  showError,
  showLoading  } from '@/utils/uniToast'
// 创建axios实例
const service = axios.create({
  baseURL: config.apiBaseUrl,
  timeout: config.timeout
})

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    // 从本地存储获取token（根据您的实际存储方式调整）
    const token = uni.getStorageSync('token') || ''

    // 如果需要token且存在token，则添加到header
    if (config.needToken && token) {
      config.headers[config.tokenKey || config.tokenKey] =
        `${config.tokenPrefix || config.tokenPrefix}${token}`
    }

    return config
  },
  (error) => {
    console.error('请求拦截错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(
  (response) => {
    // 统一处理响应数据
    const res = response.data

    // 根据您的实际API响应结构调整
    if (res.code !== 0) { // 假设0表示成功
      showError( res.message || '操作失败', 3000)
      return Promise.reject(new Error(res.message || 'Error'))
    }

    return res
  },
  (error) => {
    console.error('响应错误:', error)

    // 统一错误处理
    let errorMessage = config.errorMessages.default
    if (error.response) {
      // 服务器返回了错误状态码
      const status = error.response.status
      errorMessage = config.errorMessages[status] || errorMessage

      // 401特殊处理 - 跳转到登录页
      if (status === 401) {
        setTimeout(() => {
          uni.navigateTo({
            url: '/pages/login/login'
          })
        }, 1500)
      }
    } else if (error.request) {
      // 请求已发出但没有收到响应
      errorMessage = '网络无响应，请检查网络连接'
    } else {
      // 发送请求时出错
      errorMessage = '请求配置错误'
    }
    showError( errorMessage, 3000)

    return Promise.reject(error)
  }
)

/**
 * 封装请求方法
 * @param {Object} options - 请求配置
 * @param {boolean} options.needToken - 是否需要token，默认为true
 * @param {string} options.url - 请求URL
 * @param {string} options.method - 请求方法
 * @param {Object} options.data - 请求体数据
 * @param {Object} options.params - 查询参数
 * @returns {Promise}
 */
export function request(options) {
  const { needToken = true, url, method = 'GET', data, params } = options

  return service({
    url,
    method,
    data,
    params,
    needToken,
    [config.tokenKey]: '' // 占位，实际会在拦截器中处理
  })
}

// 导出常用方法别名
export const get = (url, params, needToken = true) =>
  request({ url, method: 'GET', params, needToken })

export const post = (url, data, needToken = true) =>
  request({ url, method: 'POST', data, needToken })

export const put = (url, data, needToken = true) =>
  request({ url, method: 'PUT', data, needToken })

export const del = (url, data, needToken = true) =>
  request({ url, method: 'DELETE', data, needToken })
